﻿using System;
// 写类和写接口的对比
// 指导原则
//    当能自然地共享实现时，使用类和子类
//    当实现是独立的，为类定义接口
namespace _057_写类和写接口的对比
{
    // 观察下面的类：
    abstract class Animal { }
    abstract class Bird : Animal { }
    abstract class Insect : Animal { }
    abstract class FlyingCreature : Animal { }
    abstract class Carnivore : Animal { }
    // 具体实现类：
    class Osrich : Bird { }
    //class Eagle : Bird, FlyingCreature, Carnivore { } // 不合法
    //class Bee : Insect, FlyingCreature { } // 不合法
    //class Flea : Insect, Carnivore { } // 不合法
    /* Eagle类、Bee类和Flea类无法编译，因为它们继承自多个类，这是非法的。
     * 为了解决这个问题，我们必须把其中的某些类转换成接口。
     * 问题是转换哪个类呢？
     * 按照一般准则，我们看出所有昆虫类共享实现，所有鸟类共享实现，所以Insect和Bird还保持为类。
     * 相反，“能飞的生物”的“能飞”是独立的机制，“食肉动物”的“食肉”是独立的机制，所以我们把FlyingCreature和Carnivore转换成接口*/
    interface IFlyingCreature { }
    interface ICarnivore { }
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
